#include <stdio.h>
#include <string.h>

char * s_gets(char * st, int n);
void stsrt(char *strings[],int n);

int main(){
    // char arr[5];
    // char *x=s_gets(arr,5);
    // puts(x);
    // puts(arr);
    char arr[3][100]={
        "fgsgfuaw",
        "afgshuigs",
        "bfsdgffdhg"
    };
    char *ptstr[3];
    for(int i=0;i<3;i++){
        ptstr[i]=arr[i];
    }
    stsrt(ptstr,3);
    for(int i=0;i<3;i++){
        puts(ptstr[i]);
    }
}



char * s_gets(char * st, int n)
{
     char * ret_val;
     int i = 0;

     ret_val = fgets(st, n, stdin);  //从标准输入流获取输入
     if (ret_val)                    //如果出错或返回NULL
     {
          while (st[i] != '\n' && st[i] != '\0') //从0开始，如果没有遇到换行符或者'\0'就一直往后加
               i++;  //第一个换行符或'\0'的位置
          if (st[i] == '\n')  //如果是换行符，就替换成'\0'
               st[i] = '\0';
          else      //如果不是，那说名就是'\0'，那么，将后面的数据全部消耗掉——清空缓冲区。
               while (getchar() != '\n')
                       continue;
     }
     return ret_val;
}

void stsrt(char *strings[],int n){
    char *temp;
    int top,seek;
    for(top=0;top<n-1;top++){
        for(seek=top+1;seek<n;seek++){
            if(strcmp(strings[top],strings[seek])>0){
                temp=strings[top];
                strings[top]=strings[seek];
                strings[seek]=temp;
            }   
        }
    }
}

/*
不可以直接将 arr 作为参数传递给 void stsrt(char *strings[], int n) 的第一个参数，因为 arr 是一个二维字符数组，而 char *strings[] 是一个指向指针的指针数组。

虽然 arr 的元素是字符数组，但是这些字符数组并不是指向字符的指针，而是实际的字符数组。而 char *strings[] 中的元素应该是指向字符的指针，这两者的类型并不匹配。

要想传递 arr 给 void stsrt(char *strings[], int n) 函数，你需要将 arr 中的每个字符数组的地址传递给 stsrt 函数，或者将 arr 转换成 char ** 类型的指针数组。这可以通过遍历 arr 中的每个元素并逐个传递其地址，或者使用类型转换来实现。
*/